/* NOTICE
    OpenJaWS - Open Java Weather Station
    
    Copyright (C) 2008 Grant Gardner <grant@lastweekend.com.au>
    
    OpenJaWS is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
    
NOTICE *//**
 * 
 */

package au.com.lastweekend.openjaws.plugins;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;

import au.com.lastweekend.openjaws.api.Readings;
import au.com.lastweekend.openjaws.api.WeatherPlugin;
import au.com.lastweekend.openjaws.api.WeatherPluginException;
import au.com.lastweekend.openjaws.util.StringUtil;

/**
 * @author ggardner
 * 
 */
public class TextFilePlugin implements WeatherPlugin {

    private File tempFile;
    private File destFile;
    private File movedFile;

    public TextFilePlugin(File destFile) throws IOException {

        tempFile = File.createTempFile(TextFilePlugin.class.getCanonicalName(), ".tmp");
        movedFile = File.createTempFile(TextFilePlugin.class.getCanonicalName(), ".moved");
        this.destFile = destFile;
    }

    public void process(Readings readings) throws WeatherPluginException {

        PrintWriter writer = null;
        try {
            writer = new PrintWriter(tempFile);
            writer.format("readingTime=%tc\n",readings.getReadingTime());
            writer.print(readings.getIndoorTemperature().getCurrent().format("indoorTemperature=%2.1f%s\n"));
            writer.print(readings.getIndoorHumidity().getCurrent().format("indoorHumidity=%2.1f%s\n"));
            writer.print(readings.getOutdoorTemperature().getCurrent().format("outdoorTemperature=%2.1f%s\n"));
            writer.print(readings.getOutdoorHumidity().getCurrent().format("outdoorHumidity=%2.1f%s\n"));
            writer.print(readings.getAirPressure().getCurrent().format("airPressure=%2.1f%s\n"));
            writer.print(readings.getRain1H().getCurrent().format("rain1H=%2.1f%s\n"));
            writer.print(readings.getRain24H().getCurrent().format("rain24H=%2.1f%s\n"));
            writer.print(readings.getRainIncrement().format("rainIncrement=%2.1f%s\n"));
            writer.print(readings.getWindSpeed().getCurrent().format("wind=%2.1f%s %s\n"));
            Map<String,Object> stationValues = readings.getStationValues();
            for (String key : stationValues.keySet()) {
                writer.format("%s=%s\n", key,StringUtil.toString(stationValues.get(key)));
            }
            
            writer.flush();

        } catch (IOException e) {
            throw new WeatherPluginException(e);
        } finally {
            if (writer != null) {
                writer.close();
            }
        }

        destFile.renameTo(movedFile);
        tempFile.renameTo(destFile);
        movedFile.delete();

    }

}
